/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package br.com.invest.action;

import br.com.invest.model.Grupo;
import br.com.invest.model.Jogador;
import java.io.Serializable;
import java.util.ArrayList;
import java.util.List;
import javax.faces.application.FacesMessage;
import javax.faces.context.FacesContext;
import org.apache.commons.codec.net.BCodec;
import org.hibernate.Criteria;
import org.hibernate.Session;
import org.hibernate.criterion.Restrictions;
import org.jboss.seam.ScopeType;
import org.jboss.seam.annotations.Begin;
import org.jboss.seam.annotations.End;
import org.jboss.seam.annotations.In;
import org.jboss.seam.annotations.Name;
import org.jboss.seam.annotations.Scope;
import org.jboss.seam.annotations.datamodel.DataModel;
import org.jboss.seam.security.Identity;

/**
 *
 * @author Kirmaier
 */
@Name("GrupoController")
@Scope(ScopeType.SESSION)
public class GrupoController implements Serializable {

    public Jogador jogador;
    @DataModel("jogadoresDM") //Cria o datamodel para jogadores

    private List<Jogador> jogadores;
    public final Double valorInicial = 1000.000;
    @In //Procura a variavel e instancia ela, no caso o BD

    private Session investDB;
    private Grupo grupo;

    @Begin(join = true)
    public String createSetup() {
        grupo = new Grupo();

        jogadores = new ArrayList<Jogador>(0);

        return "createGrupo";
    }

    @End
    public String create() {

        try {
            String senhaCriptografada = null;

            BCodec b = new BCodec();

            senhaCriptografada = grupo.getSenha();

            grupo.setSenha(b.encode(senhaCriptografada));

            grupo.setSaldo(valorInicial);

            //Salva o grupo
            investDB.save(grupo);


            FacesContext.getCurrentInstance().addMessage(null, new FacesMessage(FacesMessage.SEVERITY_INFO, "Grupo criado com sucesso!", null));
            return "success";
        } catch (Exception e) {
            e.printStackTrace();
            FacesContext.getCurrentInstance().addMessage(null, new FacesMessage(FacesMessage.SEVERITY_ERROR, "Erro ao criar o grupo: " + e.getMessage(), null));
            return null;
        }

    }

    public String getGrupoJogadores() {
        //      grupo = new Grupo();

        jogadores = new ArrayList<Jogador>(0);

        Criteria c = investDB.createCriteria(Grupo.class);
        c.add(Restrictions.eq("login", Identity.instance().getUsername()));

        grupo = (Grupo) c.uniqueResult();

        jogadores.clear();
        jogadores.addAll(grupo.getJogadores());

        return "grupo";
    }

    public String createJogadorSetup() {
        jogador = new Jogador();
        
        return null;
    }

    public String addJogadorGrupo() {

        //Injeta o Jogador dentro do Grupo
        grupo.addJogador(jogador);
        //Limpa lista de jogadores do grupo
        jogadores.clear();
        //Adiciona todos os jogadores do grupo na lista
        jogadores.addAll(grupo.getJogadores());


        return null;
    }

    public Grupo getGrupo() {
        return grupo;
    }

    public void setGrupo(Grupo grupo) {
        this.grupo = grupo;
    }

    public Jogador getJogador() {
        return jogador;
    }

    public void setJogador(Jogador jogador) {
        this.jogador = jogador;
    }

    public List<Jogador> getJogadores() {
        return jogadores;
    }

    public void setJogadores(List<Jogador> jogadores) {
        this.jogadores = jogadores;
    }

}